package com.cyl.manager.vip.service;

import java.time.LocalDateTime;
import java.util.List;
import com.cyl.manager.vip.domain.entity.VipAutoRenew;

/**
 * VIP自动续费Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IVipAutoRenewService 
{
    /**
     * 查询VIP自动续费
     * 
     * @param id VIP自动续费主键
     * @return VIP自动续费
     */
    public VipAutoRenew selectVipAutoRenewById(Long id);

    /**
     * 查询VIP自动续费列表
     * 
     * @param vipAutoRenew VIP自动续费
     * @return VIP自动续费集合
     */
    public List<VipAutoRenew> selectVipAutoRenewList(VipAutoRenew vipAutoRenew);

    /**
     * 根据用户ID查询有效的自动续费记录
     * 
     * @param userId 用户ID
     * @return VIP自动续费
     */
    public VipAutoRenew selectVipAutoRenewByUserId(Long userId);

    /**
     * 根据用户ID和充值配置ID查询自动续费记录
     * 
     * @param userId 用户ID
     * @param rechargeDataId 充值配置ID
     * @return VIP自动续费
     */
    public VipAutoRenew selectVipAutoRenewByUserIdAndRechargeDataId(Long userId, Long rechargeDataId);

    /**
     * 查询需要续费的记录
     * 
     * @param currentTime 当前时间
     * @return VIP自动续费集合
     */
    public List<VipAutoRenew> selectVipAutoRenewForRenewal(LocalDateTime currentTime);

    /**
     * 新增VIP自动续费
     * 
     * @param vipAutoRenew VIP自动续费
     * @return 结果
     */
    public int insertVipAutoRenew(VipAutoRenew vipAutoRenew);

    /**
     * 修改VIP自动续费
     * 
     * @param vipAutoRenew VIP自动续费
     * @return 结果
     */
    public int updateVipAutoRenew(VipAutoRenew vipAutoRenew);

    /**
     * 更新自动续费状态
     * 
     * @param id 自动续费ID
     * @param status 状态
     * @return 结果
     */
    public int updateVipAutoRenewStatus(Long id, Integer status);

    /**
     * 增加重试次数
     * 
     * @param id 自动续费ID
     * @param failureReason 失败原因
     * @return 结果
     */
    public int incrementRetryCount(Long id, String failureReason);

    /**
     * 更新最后续费信息
     * 
     * @param id 自动续费ID
     * @param lastRenewOrderSn 最后续费订单号
     * @param nextRenewTime 下次续费时间
     * @return 结果
     */
    public int updateLastRenewInfo(Long id, String lastRenewOrderSn, LocalDateTime nextRenewTime);

    /**
     * 批量删除VIP自动续费
     * 
     * @param ids 需要删除的VIP自动续费主键集合
     * @return 结果
     */
    public int deleteVipAutoRenewByIds(Long[] ids);

    /**
     * 删除VIP自动续费信息
     * 
     * @param id VIP自动续费主键
     * @return 结果
     */
    public int deleteVipAutoRenewById(Long id);

    /**
     * 创建自动续费订单
     * 
     * @param vipAutoRenew 自动续费记录
     * @return 结果
     */
    public boolean createAutoRenewOrder(VipAutoRenew vipAutoRenew);

    /**
     * 处理自动续费任务
     * 
     * @return 处理的记录数
     */
    public int processAutoRenewTasks();

    /**
     * 取消用户的自动续费
     * 
     * @param userId 用户ID
     * @return 结果
     */
    public boolean cancelAutoRenewByUserId(Long userId);
}